home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / u / utility / uhren / system.ac / system.ibm / sys_ibm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-11-17  |  56.2 KB  |  1,621 lines

  1. {$S0, D-}
  2. PROGRAM system ;
  3.  
  4. CONST
  5.  rsc_filename = 'system.rsc' ;
  6.  
  7.  datum_def       = '010187' ;    { Default-Werte für Datum und Zeit }
  8.  zeit_def        = '070000' ;
  9.  
  10.  alarm1_ein_def  = '063000' ;    { Default-Werte für Alarmzeiten    }
  11.  alarm1_aus_def  = '071500' ;
  12.  alarm2_ein_def  = '070000' ;
  13.  alarm2_aus_def  = '074500' ;
  14.  alarm3_ein_def  = '073000' ;
  15.  alarm3_aus_def  = '081500' ;
  16.  alarm4_ein_def  = '083000' ;
  17.  alarm4_aus_def  = '120000' ;
  18.  
  19.  elite_flag      = 1 ;           { EPSON- Schriftarten  (ESC !)  }
  20.  schmal_flag     = 4 ;
  21.  fett_flag       = 8 ;
  22.  doppel_flag     = 16 ;
  23.  breit_flag      = 32 ;
  24.  
  25.  gering          = 1 ;           { Tastaturparameter - Standardwerte       }
  26.  mittel          = 2 ;           {  Umrechnung siehe PROC Parameter_Setzen }
  27.  hoch            = 3 ;
  28.  
  29.  max_plaenge     = 99 ;          { Maximalwerte für Druckereinstellung }
  30.  max_perf        = 30 ;
  31.  max_zeilenabst  = 36 ;
  32.  max_links       = 70 ;
  33.  max_rechts      = 80 ;
  34.  
  35.  std_plaenge     = 72 ;          { Standardwerte für Druckereinstellung }
  36.  std_perf        = 8 ;
  37.  std_zeilenabst  = 12 ;
  38.  std_links       = 6 ;
  39.  std_rechts      = 80 ;
  40.  
  41. { RSC-File Konstanten }
  42.  
  43.       SYSTEM = 0;       (* TREE *)
  44.       SDATUM = 4;       (* OBJECT in TREE #0 *)
  45.       SZEIT = 7;        (* OBJECT in TREE #0 *)
  46.       ALARM1 = 9;       (* OBJECT in TREE #0 *)
  47.       ALARM2 = 10;      (* OBJECT in TREE #0 *)
  48.       ALARM3 = 11;      (* OBJECT in TREE #0 *)
  49.       ALARM4 = 12;      (* OBJECT in TREE #0 *)
  50.       UHR = 14;         (* OBJECT in TREE #0 *)
  51.       SYSOK = 29;       (* OBJECT in TREE #0 *)
  52.       SYSABBR = 30;     (* OBJECT in TREE #0 *)
  53.       SALSETZ = 23;     (* OBJECT in TREE #0 *)
  54.       SPARSETZ = 24;    (* OBJECT in TREE #0 *)
  55.       SCHALT = 25;      (* OBJECT in TREE #0 *)
  56.       STDTEXT = 26;     (* OBJECT in TREE #0 *)
  57.       STDGRAF = 27;     (* OBJECT in TREE #0 *)
  58.       DRUFEIN = 28;     (* OBJECT in TREE #0 *)
  59.  
  60.       DRUCKER = 1;      (* TREE *)
  61.       MATRIX = 4;       (* OBJECT in TREE #1 *)
  62.       TYPENRAD = 5;     (* OBJECT in TREE #1 *)
  63.       PARALLEL = 8;     (* OBJECT in TREE #1 *)
  64.       SERIELL = 9;      (* OBJECT in TREE #1 *)
  65.       ENDLOS = 11;      (* OBJECT in TREE #1 *)
  66.       EINZEL = 12;      (* OBJECT in TREE #1 *)
  67.       GR960 = 15;       (* OBJECT in TREE #1 *)
  68.       GR1280 = 16;      (* OBJECT in TREE #1 *)
  69.       PLAENGE = 26;     (* OBJECT in TREE #1 *)
  70.       PERF = 27;        (* OBJECT in TREE #1 *)
  71.       ZEILENA = 28;     (* OBJECT in TREE #1 *)
  72.       LINKS = 29;       (* OBJECT in TREE #1 *)
  73.       RECHTS = 30;      (* OBJECT in TREE #1 *)
  74.       NORM = 36;        (* OBJECT in TREE #1 *)
  75.       POTENZ = 37;      (* OBJECT in TREE #1 *)
  76.       INDEX = 38;       (* OBJECT in TREE #1 *)
  77.       ELITE = 40;       (* OBJECT in TREE #1 *)
  78.       DOPPEL = 41;      (* OBJECT in TREE #1 *)
  79.       SCHMAL = 42;      (* OBJECT in TREE #1 *)
  80.       FETT = 43;        (* OBJECT in TREE #1 *)
  81.       KURSIV = 44;      (* OBJECT in TREE #1 *)
  82.       UNTERSTR = 45;    (* OBJECT in TREE #1 *)
  83.       BREIT = 46;       (* OBJECT in TREE #1 *)
  84.       PROP = 47;        (* OBJECT in TREE #1 *)
  85.       DRUOK = 48;       (* OBJECT in TREE #1 *)
  86.       DRUABBR = 49;     (* OBJECT in TREE #1 *)
  87.  
  88.       ALARMSET = 2;     (* TREE *)
  89.       ALARMNR1 = 20;    (* OBJECT in TREE #2 *)
  90.       ALARMNR2 = 21;    (* OBJECT in TREE #2 *)
  91.       ALARMNR3 = 22;    (* OBJECT in TREE #2 *)
  92.       ALARMNR4 = 23;    (* OBJECT in TREE #2 *)
  93.       DATUMEIN = 5;     (* OBJECT in TREE #2 *)
  94.       ZEITEIN = 9;      (* OBJECT in TREE #2 *)
  95.       DATUMAUS = 14;    (* OBJECT in TREE #2 *)
  96.       ZEITAUS = 17;     (* OBJECT in TREE #2 *)
  97.       TON = 26;         (* OBJECT in TREE #2 *)
  98.       EXT1 = 27;        (* OBJECT in TREE #2 *)
  99.       EXT2 = 28;        (* OBJECT in TREE #2 *)
  100.       EXT3 = 29;        (* OBJECT in TREE #2 *)
  101.       EXT4 = 30;        (* OBJECT in TREE #2 *)
  102.       ASETOK = 31;      (* OBJECT in TREE #2 *)
  103.       ASETABBR = 32;    (* OBJECT in TREE #2 *)
  104.       ALRESET = 33;     (* OBJECT in TREE #2 *)
  105.  
  106.       PARAMSET = 3;     (* TREE *)
  107.       REPGER = 3;       (* OBJECT in TREE #3 *)
  108.       REPMIT = 4;       (* OBJECT in TREE #3 *)
  109.       REPHOCH = 5;      (* OBJECT in TREE #3 *)
  110.       VERZGER = 9;      (* OBJECT in TREE #3 *)
  111.       VERZMIT = 10;     (* OBJECT in TREE #3 *)
  112.       VERZHOCH = 11;    (* OBJECT in TREE #3 *)
  113.       TASTOK = 12;      (* OBJECT in TREE #3 *)
  114.       TASTABBR = 13;    (* OBJECT in TREE #3 *)
  115.  
  116.  
  117.  {$I gemconst.pas}
  118.  
  119. TYPE
  120.  dru_tab_type = RECORD
  121.                  art           : (art_matrix, art_typenrad) ;
  122.                  schnittstelle : (sch_parallel, sch_seriell) ;
  123.                  papier        : (pap_endlos, pap_einzel) ;
  124.                  grafik        : (pkte960, pkte1280) ;
  125.                  p_laenge      : integer ;
  126.                  perforation   : integer ;
  127.                  zeilenabstand : integer ;
  128.                  linker_rand   : integer ;
  129.                  rechter_rand  : integer ;
  130.                  schrift       : (schr_normal, schr_potenz, schr_index) ;
  131.                  schriftart    : integer ;
  132.                  proportional  : (prop_an, prop_aus) ;
  133.                  kursiv        : (kursiv_an, kursiv_aus) ;
  134.                  unterstrichen : (unterstr_an, unterstr_aus) ;
  135.                 END ;
  136.  
  137.  param_tab_type = RECORD
  138.                    verz        : integer ;  { Verzögerung            }
  139.                    rep         : integer ;  { Repeat-Geschwindigkeit }
  140.                   END ;
  141.  
  142.  schalter = (an, aus) ;
  143.  
  144.  alarm_tab_type = RECORD
  145.                    zustand     : schalter ;
  146.                    datum_ein   : integer ;
  147.                    datum_aus   : integer ;
  148.                    zeit_ein    : integer ;
  149.                    zeit_aus    : integer ;
  150.                    tonsignal   : schalter ;
  151.                    extern1     : schalter ;
  152.                    extern2     : schalter ;
  153.                    extern3     : schalter ;
  154.                    extern4     : schalter ;
  155.                   END ;
  156.  
  157.  x32_type = PACKED ARRAY[1..300] OF byte ;  { Dreiklang }
  158.  
  159.  {$I gemtype.pas}
  160.  
  161.  
  162. VAR
  163.   { Programmvariablen }
  164.   eintrag                                                : str255 ;
  165.   system_zei, drucker_zei, alarmset_zei, param_zei,
  166.   schalten_zei                                           : Dialog_Ptr ;
  167.   auswahl, pushed, config, d_status, d_test, dummy,
  168.   event, ap_id                                           : integer ;
  169.   message                                                : Message_Buffer ;
  170.   No_Dialog                                              : boolean ;
  171.   screen, akt_screen                                     : long_integer ;
  172.  
  173.   { Tastaturparameter-Variablen }
  174.   param_tab                                              : param_tab_type ;
  175.  
  176.   { Drucker-Einstellungs-Variablen }
  177.   dru_tab                                                : dru_tab_type ;
  178.   dru_reset, dru_paplaenge, dru_perforation,
  179.   dru_zeiabstand, dru_links, dru_rechts, dru_potenz,
  180.   dru_index, dru_normal, dru_prop_an, dru_prop_aus,
  181.   dru_kursiv_an, dru_kursiv_aus, dru_unterstr_an,
  182.   dru_unterstr_aus, dru_schriftart, dru_make_zeiabstand  : string[20] ;
  183.   std_text, std_grafik                                   : string ;
  184.  
  185.   { Alarm und Zeit-Variablen }
  186.   datum, zeit, switch, fehler, al_datum,
  187.   kanal1, kanal2, kanal3, kanal4, schaltok  : integer ;
  188.   alarm_tab                                 : ARRAY [1..4] OF alarm_tab_type ;
  189.   dummy_str, datum_str, zeit_str,
  190.   datumein_str, datumaus_str, zeitein_str,
  191.   zeitaus_str                               : str255 ;
  192.   uhr_flag, dummy_flag, alarm1_flag         : boolean ;
  193.   alarm_flag                                : ARRAY[1..4] OF boolean ;
  194.   dreiklang                                 : x32_type ;
  195.  
  196.  
  197.  {$I gemsubs.pas}
  198.  
  199.  
  200. { =======================  allgemeine Systemroutinen =======================  }
  201.  
  202.  
  203. FUNCTION   log_Base : integer ;           XBIOS(3) ;
  204.  
  205. PROCEDURE  set_date (datum : integer) ;   GEMDOS ($2B) ;
  206.  
  207. PROCEDURE  set_time (zeit  : integer) ;   GEMDOS ($2D) ;
  208.  
  209. FUNCTION   get_date : integer         ;   GEMDOS ($2A) ;
  210.  
  211. FUNCTION   get_time : integer         ;   GEMDOS ($2C) ;
  212.  
  213.  
  214. {----------------- Rückwandel : Wandelt Eingabestring in Integer -------------}
  215.  
  216. FUNCTION Rueckwandel (zahl_str : string) : integer ;
  217.  
  218.  BEGIN
  219.   dummy := 0 ;
  220.   IF (zahl_str[1] > '0') AND (zahl_str[1] <= '9') THEN
  221.    dummy := (ORD (zahl_str[1]) - 48) * 10 ;
  222.   IF (zahl_str[2] > '0') AND (zahl_str[2] <= '9') THEN
  223.    dummy := dummy + (ORD (zahl_str[2]) - 48) ;
  224.   Rueckwandel := dummy ;
  225.  END ;
  226.  
  227.  
  228. {--------------- Wandel : Wandelt pos. Integer in String  (max.99) -----------}
  229.  
  230. PROCEDURE Wandel (zahl : integer; VAR zahl_str : string) ;
  231.  
  232.  VAR
  233.    i                                  : integer ;
  234.  
  235.  BEGIN
  236.  
  237.   i := TRUNC (zahl / 10) ;
  238.   IF (i > 0) THEN
  239.    zahl_str := chr (48 + i)
  240.   ELSE
  241.    zahl_str := ' ' ;
  242.  
  243.   zahl := zahl - i*10 ;
  244.   zahl_str := CONCAT (zahl_str, chr (48 + zahl) ) ;
  245.  END ;
  246.  
  247.  
  248. { -------------- T_Wandel : Wandelt Zeitzahl in String -------- ------------- }
  249.  
  250. PROCEDURE T_Wandel (zahl : integer; VAR zahl_str : string) ;
  251.  
  252.  VAR
  253.    i                                  : integer ;
  254.  
  255.  BEGIN
  256.  
  257.   i := TRUNC (zahl / 10) ;
  258.   IF (i > 0) THEN
  259.    zahl_str := chr (48 + i)
  260.   ELSE
  261.    zahl_str := '0' ;
  262.  
  263.   zahl := zahl - i*10 ;
  264.   zahl_str := CONCAT (zahl_str, chr (48 + zahl) ) ;
  265.  END ;
  266.  
  267.  
  268. { ----------------- Wandel_Date : Wandelt Datum in String -------------------}
  269.  
  270. PROCEDURE Wandel_Date (date : integer ; VAR date_str : string) ;
  271.  
  272.  VAR neg_flag                       : boolean ;
  273.      jahr, mon, tag                 : integer ;
  274.  
  275.  
  276.  BEGIN
  277.   neg_flag := false ;
  278.   IF date < 0 THEN
  279.    BEGIN
  280.     neg_flag := true ;
  281.     date := date & $7FFF ;
  282.    END ;
  283.   jahr := TRUNC (date / 512) ;
  284.   mon := date - 512 * jahr ;
  285.   tag := mon ;
  286.  
  287.   jahr := jahr + 80 ;
  288.   IF neg_flag THEN jahr := jahr + 64 ;
  289.   IF jahr > 100 THEN jahr := jahr - 100 ;
  290.   mon := TRUNC (mon / 32) ;
  291.   tag := tag - 32 * mon ;
  292.  
  293.   T_Wandel (tag, date_str) ;
  294.   T_Wandel (mon, dummy_str) ;
  295.   date_str := CONCAT (date_str, dummy_str) ;
  296.   T_Wandel (jahr, dummy_str) ;
  297.   date_str := CONCAT (date_str, dummy_str) ;
  298.  END ;
  299.  
  300.  
  301. { ----------------- Wandel_Time : Wandelt Zeit in String --------------------}
  302.  
  303. PROCEDURE Wandel_Time (time : integer ; VAR time_str : string) ;
  304.  
  305.  VAR neg_flag                       : boolean ;
  306.      std, min, sek                  : integer ;
  307.  
  308.  BEGIN
  309.   neg_flag := false ;        { Wenn die Zeit > 16.00 Uhr ist, ist time }
  310.                              { negativ. }
  311.   IF time < 0 THEN
  312.    BEGIN
  313.     neg_flag := true ;
  314.     time := time & $7FFF ;
  315.    END ;
  316.   std := TRUNC (time / 2048) ;
  317.   min := time - 2048 * std ;
  318.   sek := min ;
  319.  
  320.   IF neg_flag THEN std := std + 16 ;
  321.   min := TRUNC (min / 32) ;
  322.   sek := (sek - 32 * min) * 2 ;
  323.  
  324.   T_Wandel (std, time_str) ;
  325.   T_Wandel (min, dummy_str) ;
  326.   time_str := CONCAT (time_str, dummy_str) ;
  327.   T_Wandel (sek, dummy_str) ;
  328.   time_str := CONCAT (time_str, dummy_str) ;
  329.  END ;
  330.  
  331.  
  332.  { ------------- Rueckwandel_Datum : Wandelt String in Datum -----------------}
  333.  
  334. PROCEDURE Rueckwandel_Datum (eingabe_buf : string ;
  335.                              VAR date : integer ;
  336.                              VAR eingabe_flag : boolean) ;
  337.  
  338.  VAR    jahr, mon, tag            : integer ;
  339.  
  340.  BEGIN
  341.   eingabe_flag := true ;
  342.   jahr := (ORD (eingabe_buf[5]) - 48)*10 + ORD (eingabe_buf[6]) - 48 ;
  343.  
  344.   mon  := (ORD (eingabe_buf[3]) - 48)*10 + ORD (eingabe_buf[4]) - 48 ;
  345.    IF (mon > 12) OR (mon = 0) THEN eingabe_flag := false ;
  346.  
  347.   tag  := (ORD (eingabe_buf[1]) - 48)*10 + ORD (eingabe_buf[2]) - 48 ;
  348.    IF (tag > 31) OR (tag = 0) THEN eingabe_flag := false ;
  349.    IF (mon = 4) OR (mon = 6) OR (mon = 9) OR (mon =11) THEN
  350.     IF tag > 30 THEN eingabe_flag := false ;
  351.    IF (mon = 2) THEN
  352.     IF ((tag > 28) AND (TRUNC(jahr/4) <> jahr/4)) OR (tag > 29) THEN
  353.      eingabe_flag := false ;
  354.  
  355.   date := (jahr - 80) * 512 + mon * 32 + tag ;
  356.  END ;
  357.  
  358.  
  359.  {------------- Inc_Datum : erzeugt Datum des folgenden Tages ----------------}
  360.  
  361. FUNCTION Inc_Datum (heute : str255) : integer ;
  362.  
  363.  VAR    jahr, mon, tag          : integer ;
  364.  
  365.  BEGIN
  366.   jahr := (ORD (heute[5]) - 48)*10 + ORD (heute[6]) - 48 ;
  367.  
  368.   mon  := (ORD (heute[3]) - 48)*10 + ORD (heute[4]) - 48 ;
  369.  
  370.   tag  := (ORD (heute[1]) - 48)*10 + ORD (heute[2]) - 48 ;
  371.   tag := tag + 1 ;                    { INKREMENT !! }
  372.    IF (tag > 31) THEN tag := 1 ;
  373.    IF (mon = 4) OR (mon = 6) OR (mon = 9) OR (mon =11) THEN
  374.     IF tag > 30 THEN tag := 1 ;
  375.    IF (mon = 2) THEN
  376.     IF ((tag > 28) AND (TRUNC(jahr/4) <> jahr/4)) OR (tag > 29) THEN tag := 1 ;
  377.  
  378.   IF tag = 1 THEN
  379.    BEGIN
  380.     mon := mon + 1 ;
  381.     IF mon > 12 THEN
  382.      BEGIN
  383.       mon := 1 ;
  384.       jahr := jahr + 1 ;
  385.      END ;
  386.    END ;
  387.  
  388.   Inc_Datum := (jahr - 80) * 512 + mon * 32 + tag ;
  389.  END ;
  390.  
  391.  
  392.  { ------------- Rueckwandel_Zeit : Wandelt String in Zeit -------------------}
  393.  
  394. PROCEDURE Rueckwandel_Zeit (eingabe_buf : string ;
  395.                             VAR time : integer ;
  396.                             VAR eingabe_flag : boolean) ;
  397.  
  398.  VAR    std, min, sek             : integer ;
  399.  
  400.  BEGIN
  401.   eingabe_flag := true ;
  402.   sek := (ORD (eingabe_buf[5]) - 48)*10 + ORD (eingabe_buf[6]) - 48 ;
  403.   sek := TRUNC ((sek + 1) / 2) ;
  404.   IF sek > 29 THEN sek := 29 ;
  405.  
  406.   min := (ORD (eingabe_buf[3]) - 48)*10 + ORD (eingabe_buf[4]) - 48 ;
  407.   IF min > 59 THEN eingabe_flag := false ;
  408.  
  409.   std := (ORD (eingabe_buf[1]) - 48)*10 + ORD (eingabe_buf[2]) - 48 ;
  410.   IF std > 23 THEN eingabe_flag := false ;
  411.  
  412.   time := std * 2048 + min * 32 + sek ;
  413.  END ;
  414.  
  415.  
  416. {---------------------- Check_Zeit : testet Alarmzeit (oder Datum) -----------}
  417.  
  418. FUNCTION Check_Zeit (time1, time2 : integer) : boolean ;
  419.  
  420.  VAR    neg_flag1, neg_flag2            : boolean ;
  421.  
  422.  BEGIN
  423.   Check_Zeit := false ;
  424.   neg_flag1 := false ;
  425.   neg_flag2 := false ;
  426.   IF time1 < 0 THEN neg_flag1 := true ;
  427.   IF time2 < 0 THEN neg_flag2 := true ;
  428.   IF neg_flag2 AND NOT neg_flag1 THEN Check_Zeit := true ;
  429.   IF neg_flag1 = neg_flag2 THEN
  430.    BEGIN
  431.     time1 := time1 &$7FFF ;
  432.     time2 := time2 &$7FFF ;
  433.     IF time1 <= time2 THEN Check_Zeit := true ;
  434.    END ;
  435.  END ;
  436.  
  437.  
  438. {------------------ Do_Switch : Bedient Schaltinterface ----------------------}
  439.  
  440. PROCEDURE Do_Switch (neuer_zustand : integer) ;
  441.  
  442.  VAR
  443.    temp                   : integer ;
  444.  
  445.  BEGIN
  446.   temp := 0 ;
  447.   IF neuer_zustand & $0001 <> 0 THEN temp := temp | 8 ;  { Korrektur wegen  }
  448.   IF neuer_zustand & $0002 <> 0 THEN temp := temp | 2 ;  { Schaltungsfehler }
  449.   IF neuer_zustand & $0004 <> 0 THEN temp := temp | 1 ;  { meines Interfaces}
  450.   IF neuer_zustand & $0008 <> 0 THEN temp := temp | 4 ;
  451.   rewrite (output, 'PRN:') ; { Schaltinterface wird am Druckerport betrieben }
  452.   write (chr(temp)) ;
  453.   rewrite (output, 'CON:') ;
  454.  END ;
  455.  
  456.  
  457. {---------------- Do_Gong : Läßt Dreiklang erklingen -------------------------}
  458.  
  459. FUNCTION playing : boolean;
  460.  
  461.  FUNCTION gia(data : byte ; reg : integer) : byte ;  XBIOS (28);
  462.  
  463.  BEGIN
  464.   playing := (gia(0, 7) & 2)=0
  465.  END;
  466.  
  467.  
  468. PROCEDURE Do_Gong (i : integer) ;
  469.  
  470.  VAR       j                : integer ;
  471.  
  472.  PROCEDURE play (VAR music : x32_type) ;        XBIOS (32) ;
  473.  
  474.  BEGIN
  475.   play (dreiklang) ;
  476.   IF (alarm_tab[i].extern1 = aus) AND (alarm_tab[i].extern2 = aus) AND
  477.      (alarm_tab[i].extern3 = aus) AND (alarm_tab[i].extern4 = aus) THEN
  478.     BEGIN
  479.      alarm_tab[i].zustand := aus ;        { Falls nur Notensymbol ausgewählt }
  480.      alarm_flag[i] := false ;
  481.     END ;
  482.  END ;
  483.  
  484.  
  485. {================  I N I T I A L I S I E R U N G  ============================}
  486.  
  487. PROCEDURE initialisiere ;
  488.  
  489.  VAR  index                 : integer ;      { Index für Dreiklang }
  490.  
  491.  BEGIN
  492.  
  493.   datum_str        := datum_def ;
  494.   zeit_str         := zeit_def ;
  495.   Rueckwandel_Datum (datum_str, datum, dummy_flag) ;
  496.   Set_Date (datum) ;          { Datum & Uhrzeit auf Defaultwerte setzen }
  497.   Rueckwandel_Zeit  (zeit_str, zeit, dummy_flag) ;
  498.   Set_Time (zeit) ;
  499.  
  500.   screen           := log_Base ;     { ermitteln der log. Bildschirmadresse }
  501.  
  502.   switch           := 0 ;            { Voreinstellung Schaltinterface }
  503.                                      { (wird nicht ausgeführt !)      }
  504.  
  505.   uhr_flag         := true ;         { ständige Zeitanzeige an }
  506.  
  507.   No_Dialog        := true ;         { erster Dialogaufruf }
  508.  
  509.  
  510. {--------------------- Initialisierung Drucker (inkl. Steuerzeichen) ---------}
  511.  
  512.   {---------  Steuerzeichen  (müssen dem Drucker angepasst werden) -----------}
  513.  
  514.   { Drucker-Initialisierung }
  515.   dru_reset        := CONCAT ( chr(27), '@') ;
  516.  
  517.   { Seitenlänge über Zeilenzahl setzen }
  518.   dru_paplaenge    := CONCAT ( chr(27), 'C' ) ;    { + Anzahl Zeilen }
  519.  
  520.   { Zeilen am Seitenende überspringen }
  521.   dru_perforation  := CONCAT ( chr(27), 'N') ;     { + Anzahl Zeilen }
  522.  
  523.   { Zeilenabstand auf n/72" setzen }
  524.   dru_zeiabstand   := CONCAT ( chr(27), 'A') ;     { + /72"          }
  525.   dru_make_zeiabstand := CONCAT ( chr(27), '2') ;  { für Star-Drucker }
  526.  
  527.   { linken und rechten Rand setzen }
  528.   dru_links        := CONCAT ( chr(27), 'l') ;     { + Anzahl Zeichen }
  529.   dru_rechts       := CONCAT ( chr(27), 'Q') ;     { + Anzahl Zeichen }
  530.  
  531.   { Superscript an, Subscript an, Super- und Subscript aus }
  532.   dru_potenz       := CONCAT ( chr(27), 'S', chr(0) ) ;
  533.   dru_index        := CONCAT ( chr(27), 'S', chr(1) ) ;
  534.   dru_normal       := CONCAT ( chr(27), 'T' ) ;
  535.  
  536.   { Proportionalschrift an, aus }
  537.   dru_prop_an      := CONCAT ( chr(27), 'p', chr(1) ) ;
  538.   dru_prop_aus     := CONCAT ( chr(27), 'p', chr(0) ) ;
  539.  
  540.   { Kursive Schrift an, aus  (alternativer Zeichensatz) }
  541.   dru_kursiv_an    := CONCAT ( chr(27), '4' ) ;
  542.   dru_kursiv_aus   := CONCAT ( chr(27), '5' ) ;
  543.  
  544.   { Unterstreichen an, aus }
  545.   dru_unterstr_an  := CONCAT ( chr(27), '-', chr(1) ) ;
  546.   dru_unterstr_aus := CONCAT ( chr(27), '-', chr(0) ) ;
  547.  
  548.   { Schriftart wählen (Master-Modus) }
  549.   dru_schriftart   := CONCAT ( chr(27), '!' ) ;     { + Code  ; s. Konstanten }
  550.  
  551.  
  552.   {---------------  Standard-Text_Einstellung  -------------------------------}
  553.  
  554.   std_text := CONCAT (dru_reset, dru_paplaenge, chr(72),
  555.                       dru_perforation, chr(8),
  556.                       dru_zeiabstand, chr(12), dru_make_zeiabstand,
  557.                       dru_links, chr(6),
  558.                       dru_rechts, chr(80),
  559.                       dru_schriftart, chr(elite_flag + doppel_flag) ) ;
  560.  
  561.   {---------------  Standard-Grafik_Einstellung  -----------------------------}
  562.  
  563.   std_grafik := CONCAT (dru_reset, dru_paplaenge, chr(72),
  564.                         dru_perforation, chr(0),
  565.                         dru_zeiabstand, chr(12), dru_make_zeiabstand,
  566.                         dru_links, chr(0),
  567.                         dru_rechts, chr(80) ) ;
  568.  
  569.   {---------------  Standardwerte für Feineinstellung ------------------------}
  570.  
  571.   WITH dru_tab DO
  572.    BEGIN                             { s.a. Konstantendefinitionen }
  573.     art           := art_matrix ;
  574.     schnittstelle := sch_parallel ;
  575.     papier        := pap_endlos ;
  576.     grafik        := pkte960 ;
  577.     p_laenge      := std_plaenge ;
  578.     perforation   := std_perf ;
  579.     zeilenabstand := std_zeilenabst ;
  580.     linker_rand   := std_links ;
  581.     rechter_rand  := std_rechts ;
  582.     schrift       := schr_normal ;
  583.     schriftart    := 0 ;
  584.     proportional  := prop_aus ;
  585.     kursiv        := kursiv_aus ;
  586.     unterstrichen := unterstr_aus ;
  587.    END ;
  588.  
  589.   {---------------  Tastaturparameter-Voreinstellung -------------------------}
  590.  
  591.   param_tab.verz := mittel ;      { Verzögerung bis zum ersten Repeat }
  592.   param_tab.rep  := hoch ;        { Repeat-Geschwindigkeit            }
  593.                                   {  werden NICHT ausgeführt !        }
  594.  
  595.   {--------------- Dreiklang 'komponieren' -----------------------------------}
  596.  
  597.   dreiklang[ 1] := 8  ; dreiklang[ 2] := 16  ; dreiklang[ 3] := 9  ;
  598.   dreiklang[ 4] := 0  ; dreiklang[ 5] := 10  ; dreiklang[ 6] := 0  ;
  599.   dreiklang[ 7] := 11 ; dreiklang[ 8] := 1   ; dreiklang[ 9] := 12 ;
  600.   dreiklang[10] := 0  ; dreiklang[11] := 13  ; dreiklang[12] := 9  ;
  601.   dreiklang[13] := 7  ; dreiklang[14] := 248 ; dreiklang[15] := 0  ;
  602.   dreiklang[16] := 219; dreiklang[17] := 1   ; dreiklang[18] := 1  ;
  603.   dreiklang[19] := 12 ; dreiklang[20] := 48  ; dreiklang[21] := 13 ;
  604.   dreiklang[22] := 9  ; dreiklang[23] := 2   ; dreiklang[24] := 121;
  605.   dreiklang[25] := 3  ; dreiklang[26] := 1   ; dreiklang[27] := 9  ;
  606.   dreiklang[28] := 12 ; dreiklang[29] := 4   ; dreiklang[30] := 237;
  607.   dreiklang[31] := 5  ; dreiklang[32] := 0   ; dreiklang[33] := 10 ;
  608.   dreiklang[34] := 12 ; dreiklang[35] := 130 ; dreiklang[36] := 32 ;
  609.   dreiklang[37] := 0  ; dreiklang[38] := 61  ; dreiklang[39] := 13 ;
  610.   dreiklang[40] := 9  ; dreiklang[41] := 2   ; dreiklang[42] := 237;
  611.   dreiklang[43] := 3  ; dreiklang[44] := 0   ; dreiklang[45] := 4  ;
  612.   dreiklang[46] := 188; dreiklang[47] := 130 ; dreiklang[48] := 32 ;
  613.   dreiklang[49] := 0  ; dreiklang[50] := 121 ; dreiklang[51] := 12 ;
  614.   dreiklang[52] := 96 ; dreiklang[53] := 13  ; dreiklang[54] := 9  ;
  615.   dreiklang[55] := 2  ; dreiklang[56] := 219 ; dreiklang[57] := 3  ;
  616.   dreiklang[58] := 1  ; dreiklang[59] := 4   ; dreiklang[60] := 237;
  617.   dreiklang[61] := 130; dreiklang[62] := 64  ; dreiklang[63] := 9  ;
  618.   dreiklang[64] := 0  ; dreiklang[65] := 10  ; dreiklang[66] := 0  ;
  619.   dreiklang[67] := 130; dreiklang[68] := 4   ; dreiklang[69] := 7  ;
  620.   dreiklang[70] := 255; dreiklang[71] := 130 ; dreiklang[72] := 0  ;
  621.  
  622.   FOR index := 73 TO 300 DO dreiklang[index] := 0 ;
  623.  END ;
  624.  
  625.  
  626. {-----------------  Alarm-Voreinstellung  ------------------------------------}
  627.  
  628. PROCEDURE Alarm_Voreinstellung ;
  629.  
  630.  BEGIN
  631.   Wandel_Date (Get_Date, datum_str) ;
  632.   al_datum := Inc_Datum (datum_str) ;   { als Default-Datum 'morgen' nehmen }
  633.  
  634.   alarm_flag[1] := false ;
  635.   alarm_flag[2] := false ;
  636.   alarm_flag[3] := false ;
  637.   alarm_flag[4] := false ;
  638.  
  639.   WITH alarm_tab[1] DO
  640.    BEGIN
  641.     zustand   := aus ;
  642.     datum_ein := al_datum ;                { jeweils aktuelles Datum + 1 }
  643.     datum_aus := al_datum ;
  644.     tonsignal := an  ;
  645.     extern1   := aus ;
  646.     extern2   := aus ;
  647.     extern3   := aus ;
  648.     extern4   := aus ;
  649.    END ;
  650.     Rueckwandel_Zeit (alarm1_ein_def, alarm_tab[1].zeit_ein, dummy_flag) ;
  651.     Rueckwandel_Zeit (alarm1_aus_def, alarm_tab[1].zeit_aus, dummy_flag) ;
  652.  
  653.   WITH alarm_tab[2] DO
  654.    BEGIN
  655.     zustand   := aus ;
  656.     datum_ein := al_datum ;
  657.     datum_aus := al_datum ;
  658.     tonsignal := an ;
  659.     extern1   := aus ;
  660.     extern2   := aus ;
  661.     extern3   := aus ;
  662.     extern4   := aus ;
  663.    END ;
  664.     Rueckwandel_Zeit (alarm2_ein_def, alarm_tab[2].zeit_ein, dummy_flag) ;
  665.     Rueckwandel_Zeit (alarm2_aus_def, alarm_tab[2].zeit_aus, dummy_flag) ;
  666.  
  667.   WITH alarm_tab[3] DO
  668.    BEGIN
  669.     zustand   := aus ;
  670.     datum_ein := al_datum ;
  671.     datum_aus := al_datum ;
  672.     tonsignal := an  ;
  673.     extern1   := aus ;
  674.     extern2   := aus ;
  675.     extern3   := aus ;
  676.     extern4   := aus ;
  677.    END ;
  678.     Rueckwandel_Zeit (alarm3_ein_def, alarm_tab[3].zeit_ein, dummy_flag) ;
  679.     Rueckwandel_Zeit (alarm3_aus_def, alarm_tab[3].zeit_aus, dummy_flag) ;
  680.  
  681.   WITH alarm_tab[4] DO
  682.    BEGIN
  683.     zustand   := aus ;
  684.     datum_ein := al_datum ;
  685.     datum_aus := al_datum ;
  686.     tonsignal := an  ;
  687.     extern1   := aus ;
  688.     extern2   := aus ;
  689.     extern3   := aus ;
  690.     extern4   := aus ;
  691.    END ;
  692.     Rueckwandel_Zeit (alarm4_ein_def, alarm_tab[4].zeit_ein, dummy_flag) ;
  693.     Rueckwandel_Zeit (alarm4_aus_def, alarm_tab[4].zeit_aus, dummy_flag) ;
  694.  
  695.  END ;
  696.  
  697.  
  698. {---------------- Make_Schalten : Dialogerstellung zum Schalten --------------}
  699.  
  700. PROCEDURE Make_Schalten ;
  701.  
  702.  BEGIN
  703.   schalten_zei := New_Dialog (10, 0, 0, 24, 15) ;
  704.  
  705.   dummy := Add_DItem (schalten_zei, G_Boxtext, none, 2, 1, 20, 2, 2, 4577) ;
  706.   Set_DText (schalten_zei, dummy, ' Schalten ', System_Font, TE_Center) ;
  707.   kanal1 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 4,
  708.                        16, 1, 2, 4096) ;
  709.   Set_DText (schalten_zei, kanal1, 'Kanal 1', System_Font, TE_Center) ;
  710.  
  711.   kanal2 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 6,
  712.                        16, 1, 2, 4096) ;
  713.   Set_DText (schalten_zei, kanal2, 'Kanal 2', System_Font, TE_Center) ;
  714.  
  715.   kanal3 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 8,
  716.                        16, 1, 2, 4096) ;
  717.   Set_DText (schalten_zei, kanal3, 'Kanal 3', System_Font, TE_Center) ;
  718.  
  719.   kanal4 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 10,
  720.                        16, 1, 2, 4096) ;
  721.   Set_DText (schalten_zei, kanal4, 'Kanal 4', System_Font, TE_Center) ;
  722.  
  723.   schaltok := Add_DItem (schalten_zei, G_Button, Selectable|Default|Exit_Btn,
  724.                            6, 13, 12, 1, 2, 4096) ;
  725.   Set_DText (schalten_zei, schaltok, 'OK', System_Font, TE_Center) ;
  726.  
  727.   Center_Dialog (schalten_zei) ;
  728.  END ;
  729.  
  730.  
  731. {=============== U N T E R P R O G R A M M E =================================}
  732.  
  733.  
  734. {-----------------------------------------------------------------------------}
  735. {                                                                             }
  736. {   DRUCKER  :  Alles zur Druckervoreinstellung                               }
  737. {                                                                             }
  738. {-----------------------------------------------------------------------------}
  739.  
  740.  
  741. {--------------------- Drucker-Systemfunktionen ------------------------------}
  742.  
  743. FUNCTION drucker_test (dev : integer) : integer ;      BIOS (8) ;
  744.  
  745. FUNCTION set_prt (config : integer) : integer ;        XBIOS (33) ;
  746.  
  747.  
  748. {--------------------- Standard_Text : Einstellung für Textausgabe -----------}
  749.  
  750. PROCEDURE Standard_Text ;
  751.  
  752.  BEGIN
  753.   REPEAT
  754.    d_test := drucker_test (0) ;
  755.    IF d_test = -1 THEN
  756.     BEGIN
  757.      rewrite (output, 'PRN:') ;
  758.      write (std_text) ;           { Definition s. Initialisierung }
  759.      rewrite (output, 'CON:') ;
  760.      d_status := 0 +                    { Matrix    ;  1 für Typenrad    }
  761.                  2 +                    { s/w       ;  0 für Farbe       }
  762.                  4 +                    { 960 Pkte  ;  0 für 1280 Pkte   }
  763.                  0 +                    { Draft     ;  8 für NLQ         }
  764.                  0 +                    { Parallel  ; 16 für seriell     }
  765.                  0                      { endlos    ; 32 für Einzelblatt } ;
  766.      config := set_prt (-1) ;       { aktuellen Status lesen }
  767.      config := config & $07FC ;     { Flags löschen          }
  768.      config := config | d_status ;
  769.      dummy := set_prt (config) ;    { Druckerflags im Atari setzen }
  770.     END
  771.    ELSE
  772.     auswahl := Do_Alert
  773.      ('[1][   Drucker ist nicht bereit !   ][ Nochmal | Abbruch ]', 1) ;
  774.   UNTIL (d_test = -1) OR (auswahl = 2) ;
  775.   IF d_test = -1 THEN
  776.    BEGIN
  777.     End_Dialog (system_zei) ;
  778.     fehler := 0 ;
  779.    END
  780.   ELSE
  781.    fehler := 128 ;
  782.  END ;
  783.  
  784.  
  785. {--------------------- Standard_Grafik : Einstellung für Grafik --------------}
  786.  
  787. PROCEDURE Standard_Grafik ;
  788.  
  789.  BEGIN
  790.   REPEAT
  791.    d_test := drucker_test (0) ;
  792.    IF d_test = -1 THEN
  793.     BEGIN
  794.      rewrite (output, 'PRN:') ;
  795.      write (std_grafik) ;        { Definition s. Initialisierung }
  796.      rewrite (output, 'CON:') ;
  797.      d_status := 0 +                    { Matrix    ;  1 für Typenrad    }
  798.                  2 +                    { s/w       ;  0 für Farbe       }
  799.                  4 +                    { 960 Pkte  ;  0 für 1280 Pkte   }
  800.                  0 +                    { Draft     ;  8 für NLQ         }
  801.                  0 +                    { Parallel  ; 16 für seriell     }
  802.                  0                      { endlos    ; 32 für Einzelblatt } ;
  803.      config := set_prt (-1) ;       { aktuellen Status lesen }
  804.      config := config & $07FC ;     { Flags löschen          }
  805.      config := config | d_status ;
  806.      dummy := set_prt (config) ;    { Druckerflags im Atari setzen }
  807.     END
  808.    ELSE
  809.     auswahl := Do_Alert
  810.      ('[1][   Drucker ist nicht bereit !   ][ Nochmal | Abbruch ]', 1) ;
  811.   UNTIL (d_test = -1) OR (auswahl = 2) ;
  812.   IF d_test = -1 THEN
  813.    BEGIN
  814.     End_Dialog (system_zei) ;
  815.     fehler := 0 ;
  816.    END
  817.   ELSE
  818.    fehler := 128 ;
  819.  END ;
  820.  
  821.  
  822. {-----------------  Drucker_Feineinstellung  ---------------------------------}
  823.  
  824. PROCEDURE Drucker_Feineinstellung ;
  825.  
  826.  VAR
  827.   zahl_str, eingabe_str, init_sequenz       : str255 ;
  828.  
  829.  BEGIN
  830.   IF dru_tab.art = art_matrix THEN                            { MATRIX }
  831.    Obj_SetState (drucker_zei, matrix, selected, false)
  832.   ELSE
  833.    Obj_SetState (drucker_zei, matrix, normal, false) ;
  834.   IF dru_tab.art = art_typenrad THEN                          { TYPENRAD }
  835.    Obj_SetState (drucker_zei, typenrad, selected, false)
  836.   ELSE
  837.    Obj_SetState (drucker_zei, typenrad, normal, false) ;
  838.   IF dru_tab.schnittstelle = sch_parallel THEN                { PARALLEL }
  839.    Obj_SetState (drucker_zei, parallel, selected, false)
  840.   ELSE
  841.    Obj_SetState (drucker_zei, parallel, normal, false) ;
  842.   IF dru_tab.schnittstelle = sch_seriell THEN                 { SERIELL }
  843.    Obj_SetState (drucker_zei, seriell, selected, false)
  844.   ELSE
  845.    Obj_SetState (drucker_zei, seriell, normal, false) ;
  846.   IF dru_tab.papier = pap_endlos THEN                         { ENDLOS-PAPIER }
  847.    Obj_SetState (drucker_zei, endlos, selected, false)
  848.   ELSE
  849.    Obj_SetState (drucker_zei, endlos, normal, false) ;
  850.   IF dru_tab.papier = pap_einzel THEN                         { EINZELBLATT }
  851.    Obj_SetState (drucker_zei, einzel, selected, false)
  852.   ELSE
  853.    Obj_SetState (drucker_zei, einzel, normal, false) ;
  854.   IF dru_tab.grafik = pkte960 THEN                            { 960 Pkte }
  855.    Obj_SetState (drucker_zei, gr960, selected, false)
  856.   ELSE
  857.    Obj_SetState (drucker_zei, gr960, normal, false) ;
  858.   IF dru_tab.grafik = pkte1280 THEN                           { 1280 Pkte }
  859.    Obj_SetState (drucker_zei, gr1280, selected, false)
  860.   ELSE
  861.    Obj_SetState (drucker_zei, gr1280, normal, false) ;
  862.  
  863.   IF dru_tab.schrift = schr_normal THEN                       { Größe normal }
  864.    Obj_SetState (drucker_zei, norm, selected, false)
  865.   ELSE
  866.    Obj_SetState (drucker_zei, norm, normal, false) ;
  867.   IF dru_tab.schrift = schr_potenz THEN                       {  "    Potenz }
  868.    Obj_SetState (drucker_zei, potenz, selected, false)
  869.   ELSE
  870.    Obj_SetState (drucker_zei, potenz, normal, false) ;
  871.   IF dru_tab.schrift = schr_index THEN                        {  "    Index }
  872.    Obj_SetState (drucker_zei, index, selected, false)
  873.   ELSE
  874.    Obj_SetState (drucker_zei, index, normal, false) ;
  875.  
  876.   IF dru_tab.proportional = prop_an THEN                      { PROPORTIONAL }
  877.    Obj_SetState (drucker_zei, prop, selected, false)
  878.   ELSE
  879.    Obj_SetState (drucker_zei, prop, normal, false) ;
  880.  
  881.   IF dru_tab.kursiv = kursiv_an THEN                          { KURSIV }
  882.    Obj_SetState (drucker_zei, kursiv, selected, false)
  883.   ELSE
  884.    Obj_SetState (drucker_zei, kursiv, normal, false) ;
  885.  
  886.   IF dru_tab.unterstrichen = unterstr_an THEN                 { UNTERSTRICHEN }
  887.    Obj_SetState (drucker_zei, unterstr, selected, false)
  888.   ELSE
  889.    Obj_SetState (drucker_zei, unterstr, normal, false) ;
  890.  
  891.   IF dru_tab.schriftart & elite_flag <> 0 THEN                { ELITE }
  892.    Obj_SetState (drucker_zei, elite, selected, false)
  893.   ELSE
  894.    Obj_SetState (drucker_zei, elite, normal, false) ;
  895.  
  896.   IF dru_tab.schriftart & schmal_flag <> 0 THEN               { SCHMAL }
  897.    Obj_SetState (drucker_zei, schmal, selected, false)
  898.   ELSE
  899.    Obj_SetState (drucker_zei, schmal, normal, false) ;
  900.  
  901.   IF dru_tab.schriftart & fett_flag <> 0 THEN                 { FETT }
  902.    Obj_SetState (drucker_zei, fett, selected, false)
  903.   ELSE
  904.    Obj_SetState (drucker_zei, fett, normal, false) ;
  905.  
  906.   IF dru_tab.schriftart & doppel_flag <> 0 THEN               { DOPPEL }
  907.    Obj_SetState (drucker_zei, doppel, selected, false)
  908.   ELSE
  909.    Obj_SetState (drucker_zei, doppel, normal, false) ;
  910.  
  911.   IF dru_tab.schriftart & breit_flag <> 0 THEN                { BREIT }
  912.    Obj_SetState (drucker_zei, breit, selected, false)
  913.   ELSE
  914.    Obj_SetState (drucker_zei, breit, normal, false) ;
  915.  
  916.   Wandel (dru_tab.p_laenge, zahl_str) ;
  917.   Set_DEdit(drucker_zei, plaenge, '__', '99', zahl_str, System_Font, TE_Left) ;
  918.  
  919.   Wandel (dru_tab.perforation, zahl_str) ;
  920.   Set_DEdit(drucker_zei, perf, '__', '99', zahl_str, System_Font, TE_Left) ;
  921.  
  922.   Wandel (dru_tab.zeilenabstand, zahl_str) ;
  923.   Set_DEdit(drucker_zei, zeilena, '__', '99', zahl_str, System_Font, TE_Left) ;
  924.  
  925.   Wandel (dru_tab.linker_rand, zahl_str) ;
  926.   Set_DEdit(drucker_zei, links, '__', '99', zahl_str, System_Font, TE_Left) ;
  927.  
  928.   Wandel (dru_tab.rechter_rand, zahl_str) ;
  929.   Set_DEdit(drucker_zei, rechts, '__', '99', zahl_str, System_Font, TE_Left) ;
  930.  
  931.  
  932.   pushed := Do_Dialog (drucker_zei, 0) ;
  933.   Obj_SetState (drucker_zei, pushed, normal, true) ;
  934.   IF pushed = druok THEN
  935.    BEGIN
  936.     init_sequenz := dru_reset ;                    { A U S W E R T U N G }
  937.  
  938.     d_status := 2 ;                                { s/w - Drucker }
  939.     IF Obj_State (drucker_zei, typenrad) & Selected <> 0 THEN
  940.      BEGIN
  941.       d_status := d_status + 1 ;
  942.       dru_tab.art := art_typenrad ;
  943.      END
  944.     ELSE
  945.      dru_tab.art := art_matrix ;
  946.     IF Obj_State (drucker_zei, seriell) & Selected <> 0 THEN
  947.      BEGIN
  948.       d_status := d_status + 16 ;
  949.       dru_tab.schnittstelle := sch_seriell ;
  950.      END
  951.     ELSE
  952.      dru_tab.schnittstelle := sch_parallel ;
  953.     IF Obj_State (drucker_zei, einzel) & Selected <> 0 THEN
  954.      BEGIN
  955.       d_status := d_status + 32 ;
  956.       dru_tab.papier := pap_einzel ;
  957.      END
  958.     ELSE
  959.      dru_tab.papier := pap_endlos ;
  960.     IF Obj_State (drucker_zei, gr960) & Selected <> 0 THEN
  961.      BEGIN
  962.       d_status := d_status + 4 ;
  963.       dru_tab.grafik := pkte960 ;
  964.      END
  965.     ELSE
  966.      dru_tab.grafik := pkte1280 ;
  967.  
  968.     Get_DEdit (drucker_zei, plaenge, eingabe_str) ;
  969.     dru_tab.p_laenge := Rueckwandel (eingabe_str) ;
  970.     IF dru_tab.p_laenge > max_plaenge THEN
  971.      dru_tab.p_laenge := std_plaenge ;
  972.     init_sequenz := CONCAT
  973.      (init_sequenz, dru_paplaenge, chr(dru_tab.p_laenge) ) ;
  974.  
  975.     Get_DEdit (drucker_zei, perf, eingabe_str) ;
  976.     dru_tab.perforation := Rueckwandel (eingabe_str) ;
  977.     IF dru_tab.perforation > max_perf THEN
  978.      dru_tab.perforation := std_perf ;
  979.     init_sequenz := CONCAT
  980.      (init_sequenz, dru_perforation, chr(dru_tab.perforation) ) ;
  981.  
  982.     Get_DEdit (drucker_zei, zeilena, eingabe_str) ;
  983.     dru_tab.zeilenabstand := Rueckwandel (eingabe_str) ;
  984.     IF dru_tab.zeilenabstand > max_zeilenabst THEN
  985.      dru_tab.zeilenabstand := std_zeilenabst ;
  986.     init_sequenz := CONCAT
  987.      (init_sequenz, dru_zeiabstand, chr(dru_tab.zeilenabstand),
  988.       dru_make_zeiabstand ) ;
  989.  
  990.     Get_DEdit (drucker_zei, links, eingabe_str) ;
  991.     dru_tab.linker_rand := Rueckwandel (eingabe_str) ;
  992.     IF dru_tab.linker_rand > max_links THEN
  993.      dru_tab.linker_rand := std_links ;
  994.     init_sequenz := CONCAT
  995.      (init_sequenz, dru_links, chr(dru_tab.linker_rand) ) ;
  996.  
  997.     Get_DEdit (drucker_zei, rechts, eingabe_str) ;
  998.     dru_tab.rechter_rand := Rueckwandel (eingabe_str) ;
  999.     IF dru_tab.rechter_rand > max_rechts THEN
  1000.      dru_tab.rechter_rand := std_rechts ;
  1001.     init_sequenz := CONCAT
  1002.      (init_sequenz, dru_rechts, chr(dru_tab.rechter_rand) ) ;
  1003.  
  1004.     dru_tab.schriftart := 0 ;
  1005.     IF Obj_State (drucker_zei, elite) & Selected <> 0 THEN
  1006.      dru_tab.schriftart := dru_tab.schriftart + elite_flag ;
  1007.     IF Obj_State (drucker_zei, schmal) & Selected <> 0 THEN
  1008.      dru_tab.schriftart := dru_tab.schriftart + schmal_flag ;
  1009.     IF Obj_State (drucker_zei, fett) & Selected <> 0 THEN
  1010.      dru_tab.schriftart := dru_tab.schriftart + fett_flag ;
  1011.     IF Obj_State (drucker_zei, doppel) & Selected <> 0 THEN
  1012.      dru_tab.schriftart := dru_tab.schriftart + doppel_flag ;
  1013.     IF Obj_State (drucker_zei, breit) & Selected <> 0 THEN
  1014.      dru_tab.schriftart := dru_tab.schriftart + breit_flag ;
  1015.     init_sequenz := CONCAT
  1016.      (init_sequenz, dru_schriftart, chr(dru_tab.schriftart) ) ;
  1017.  
  1018.     IF Obj_State (drucker_zei, norm) & Selected <> 0 THEN
  1019.      BEGIN
  1020.       dru_tab.schrift := schr_normal ;
  1021.       init_sequenz := CONCAT
  1022.        (init_sequenz, dru_normal) ;
  1023.      END ;
  1024.  
  1025.     IF Obj_State (drucker_zei, potenz) & Selected <> 0 THEN
  1026.      BEGIN
  1027.       dru_tab.schrift := schr_potenz ;
  1028.       init_sequenz := CONCAT
  1029.        (init_sequenz, dru_potenz) ;
  1030.      END ;
  1031.  
  1032.     IF Obj_State (drucker_zei, index) & Selected <> 0 THEN
  1033.      BEGIN
  1034.       dru_tab.schrift := schr_index ;
  1035.       init_sequenz := CONCAT
  1036.        (init_sequenz, dru_index) ;
  1037.      END ;
  1038.  
  1039.     IF Obj_State (drucker_zei, prop) & Selected <> 0 THEN
  1040.      BEGIN
  1041.       dru_tab.proportional := prop_an ;
  1042.       init_sequenz := CONCAT
  1043.        (init_sequenz, dru_prop_an) ;
  1044.      END
  1045.     ELSE
  1046.      dru_tab.proportional := prop_aus ;
  1047.  
  1048.     IF Obj_State (drucker_zei, unterstr) & Selected <> 0 THEN
  1049.      BEGIN
  1050.       dru_tab.unterstrichen := unterstr_an ;
  1051.       init_sequenz := CONCAT
  1052.        (init_sequenz, dru_unterstr_an) ;
  1053.      END
  1054.     ELSE
  1055.      dru_tab.unterstrichen := unterstr_aus ;
  1056.  
  1057.     IF Obj_State (drucker_zei, kursiv) & Selected <> 0 THEN
  1058.      BEGIN
  1059.       dru_tab.kursiv := kursiv_an ;
  1060.       init_sequenz := CONCAT
  1061.        (init_sequenz, dru_kursiv_an) ;
  1062.      END
  1063.     ELSE
  1064.      dru_tab.kursiv := kursiv_aus ;
  1065.  
  1066.     REPEAT
  1067.      d_test := drucker_test (0) ;
  1068.      IF d_test = -1 THEN
  1069.       BEGIN
  1070.        rewrite (output, 'PRN:') ;
  1071.        write (init_sequenz) ;            { Initialisierung des Druckers }
  1072.        rewrite (output, 'CON:') ;
  1073.       END
  1074.      ELSE
  1075.       auswahl := Do_Alert
  1076.        ('[1][   Drucker ist nicht bereit !   ][ Nochmal | Abbruch ]', 1) ;
  1077.     UNTIL (d_test = -1) OR (auswahl = 2) ;
  1078.  
  1079.     config := set_prt (-1) ;       { aktuellen Status lesen }
  1080.     config := config & $07FC ;     { Flags löschen          }
  1081.     config := config | d_status ;
  1082.     dummy := set_prt (config) ;    { Druckerflags im Atari setzen }
  1083.    END ;
  1084.   End_Dialog (drucker_zei) ;
  1085.  END ;
  1086.  
  1087.  
  1088. {-----------------------------------------------------------------------------}
  1089. {                                                                             }
  1090. {    PARAMETER :  Tastaturparameter setzen                                    }
  1091. {                                                                             }
  1092. {-----------------------------------------------------------------------------}
  1093.  
  1094. PROCEDURE Parameter_Setzen ;
  1095.  
  1096.  PROCEDURE kbrate (kb_init, kb_rep : integer) ;     XBIOS(35) ;
  1097.  
  1098.  BEGIN
  1099.   CASE param_tab.rep OF
  1100.     gering  : Obj_SetState (param_zei, repger, selected, false) ;
  1101.     mittel  : Obj_SetSTate (param_zei, repmit, selected, false) ;
  1102.     hoch    : Obj_SetSTate (param_zei, rephoch, selected, false) ;
  1103.    END ;
  1104.   CASE param_tab.verz OF
  1105.     gering  : Obj_SetState (param_zei, verzger, selected, false) ;
  1106.     mittel  : Obj_SetSTate (param_zei, verzmit, selected, false) ;
  1107.     hoch    : Obj_SetSTate (param_zei, verzhoch, selected, false) ;
  1108.    END ;
  1109.   pushed := Do_Dialog (param_zei, 0) ;
  1110.   Obj_SetState (param_zei, pushed, normal, true) ;
  1111.   IF pushed = tastok THEN
  1112.    BEGIN
  1113.     IF Obj_State (param_zei, repger) & Selected <> 0 THEN
  1114.      param_tab.rep := gering ;
  1115.     IF Obj_State (param_zei, repmit) & Selected <> 0 THEN
  1116.      param_tab.rep := mittel ;
  1117.     IF Obj_State (param_zei, rephoch) & Selected <> 0 THEN
  1118.      param_tab.rep := hoch ;
  1119.     IF Obj_State (param_zei, verzger) & Selected <> 0 THEN
  1120.      param_tab.verz := gering ;
  1121.     IF Obj_State (param_zei, verzmit) & Selected <> 0 THEN
  1122.      param_tab.verz := mittel ;
  1123.     IF Obj_State (param_zei, verzhoch) & Selected <> 0 THEN
  1124.      param_tab.verz := hoch ;
  1125.  
  1126.     kbrate (10 + param_tab.verz * 10, (5 - param_tab.rep)) ; {Setzen der ein- }
  1127.                                                              {gestellten Werte}
  1128.    END ;
  1129.    Obj_SetState (param_zei, repger, normal, true) ;
  1130.    Obj_SetState (param_zei, repmit, normal, true) ;
  1131.    Obj_SetState (param_zei, rephoch, normal, true) ;
  1132.    Obj_SetState (param_zei, verzger, normal, true) ;
  1133.    Obj_SetState (param_zei, verzmit, normal, true) ;
  1134.    Obj_SetState (param_zei, verzhoch, normal, true) ;
  1135.   End_Dialog (param_zei) ;
  1136.  END ;
  1137.  
  1138.  
  1139. {-----------------------------------------------------------------------------}
  1140. {                                                                             }
  1141. {   ALARM  :  Alles zur Alarmverwaltung                                       }
  1142. {                                                                             }
  1143. {-----------------------------------------------------------------------------}
  1144.  
  1145.  
  1146. {---------------- Do_Alarm_Auswerten -----------------------------------------}
  1147.  
  1148. PROCEDURE Do_Alarm_Auswerten (i : integer ; VAR fehlertyp : integer ) ;
  1149.  
  1150.  VAR     korrekt       : boolean ;
  1151.  
  1152.  BEGIN
  1153.   fehlertyp := 0 ;
  1154.  
  1155.   IF Obj_State (alarmset_zei, ton) & Selected <> 0 THEN
  1156.    alarm_tab[i].tonsignal := an
  1157.   ELSE
  1158.    alarm_tab[i].tonsignal := aus ;
  1159.   IF Obj_State (alarmset_zei, ext1) & Selected <> 0 THEN
  1160.    alarm_tab[i].extern1 := an
  1161.   ELSE
  1162.    alarm_tab[i].extern1 := aus ;
  1163.   IF Obj_State (alarmset_zei, ext2) & Selected <> 0 THEN
  1164.    alarm_tab[i].extern2 := an
  1165.   ELSE
  1166.    alarm_tab[i].extern2 := aus ;
  1167.   IF Obj_State (alarmset_zei, ext3) & Selected <> 0 THEN
  1168.    alarm_tab[i].extern3 := an
  1169.   ELSE
  1170.    alarm_tab[i].extern3 := aus ;
  1171.   IF Obj_State (alarmset_zei, ext4) & Selected <> 0 THEN
  1172.    alarm_tab[i].extern4 := an
  1173.   ELSE
  1174.    alarm_tab[i].extern4 := aus ;
  1175.  
  1176.   Get_DEdit (alarmset_zei, datumein, datumein_str) ;
  1177.   Rueckwandel_Datum (datumein_str, dummy, korrekt) ;
  1178.   IF NOT korrekt THEN fehlertyp := fehlertyp + 1
  1179.   ELSE alarm_tab[i].datum_ein := dummy ;
  1180.  
  1181.   Get_DEdit (alarmset_zei, zeitein, zeitein_str) ;
  1182.   Rueckwandel_Zeit (zeitein_str, dummy, korrekt) ;
  1183.   IF NOT korrekt THEN fehlertyp := fehlertyp + 4
  1184.   ELSE alarm_tab[i].zeit_ein := dummy ;
  1185.  
  1186.   Get_DEdit (alarmset_zei, datumaus, datumaus_str) ;
  1187.   Rueckwandel_Datum (datumaus_str, dummy, korrekt) ;
  1188.   IF NOT korrekt THEN fehlertyp := fehlertyp + 2
  1189.   ELSE alarm_tab[i].datum_aus := dummy ;
  1190.  
  1191.   Get_DEdit (alarmset_zei, zeitaus, zeitaus_str) ;
  1192.   Rueckwandel_Zeit (zeitaus_str, dummy, korrekt) ;
  1193.   IF NOT korrekt THEN fehlertyp := fehlertyp + 8
  1194.   ELSE alarm_tab[i].zeit_aus := dummy ;
  1195.  
  1196.   IF NOT check_zeit (alarm_tab[i].datum_ein, alarm_tab[i].datum_aus) THEN
  1197.    alarm_tab[i].datum_aus := alarm_tab[i].datum_ein ;
  1198.   IF (NOT check_zeit (alarm_tab[i].zeit_ein, alarm_tab[i].zeit_aus))
  1199.      AND (alarm_tab[i].datum_ein = alarm_tab[i].datum_aus) THEN
  1200.    fehlertyp := fehlertyp + 16 ;
  1201.                         { Test, ob Einschaltzeit früher als Ausschaltzeit }
  1202.  END ;
  1203.  
  1204.  
  1205. {----------------- Do_AlarmSet : Alarm verwalten -----------------------------}
  1206.  
  1207. PROCEDURE Do_AlarmSet ;
  1208.  
  1209.   VAR  fertig             : boolean ;
  1210.        nr, fehlernr       : integer ;
  1211.  
  1212.   PROCEDURE Alarm_Init (i : integer) ;
  1213.  
  1214.    BEGIN
  1215.     Wandel_Date (alarm_tab[i].datum_ein, datumein_str) ;
  1216.     Wandel_Time (alarm_tab[i].zeit_ein, zeitein_str) ;
  1217.     Wandel_Date (alarm_tab[i].datum_aus , datumaus_str) ;
  1218.     Wandel_Time (alarm_tab[i].zeit_aus, zeitaus_str) ;
  1219.     Set_DEdit (alarmset_zei, datumein, '__/__/__', '999999', datumein_str,
  1220.                System_Font, TE_Center) ;
  1221.     Set_DEdit (alarmset_zei, zeitein, '__:__.__', '999999', zeitein_str,
  1222.                System_Font, TE_Center) ;
  1223.     Set_DEdit (alarmset_zei, datumaus, '__/__/__', '999999', datumaus_str,
  1224.                System_Font, TE_Center) ;
  1225.     Set_DEdit (alarmset_zei, zeitaus, '__:__.__', '999999', zeitaus_str,
  1226.                System_Font, TE_Center) ;
  1227.  
  1228.     IF alarm_tab[i].tonsignal = an THEN
  1229.      Obj_SetState (alarmset_zei, ton, selected, true)
  1230.     ELSE
  1231.      Obj_SetState (alarmset_zei, ton, normal, true) ;
  1232.  
  1233.     IF alarm_tab[i].extern1 = an THEN
  1234.      Obj_SetState (alarmset_zei, ext1, selected, true)
  1235.     ELSE
  1236.      Obj_SetState (alarmset_zei, ext1, normal, true) ;
  1237.  
  1238.     IF alarm_tab[i].extern2 = an THEN
  1239.      Obj_SetState (alarmset_zei, ext2, selected, true)
  1240.     ELSE
  1241.      Obj_SetState (alarmset_zei, ext2, normal, true) ;
  1242.  
  1243.     IF alarm_tab[i].extern3 = an THEN
  1244.      Obj_SetState (alarmset_zei, ext3, selected, true)
  1245.     ELSE
  1246.      Obj_SetState (alarmset_zei, ext3, normal, true) ;
  1247.  
  1248.     IF alarm_tab[i].extern4 = an THEN
  1249.      Obj_SetState (alarmset_zei, ext4, selected, true)
  1250.     ELSE
  1251.      Obj_SetState (alarmset_zei, ext4, normal, true) ;
  1252.    END ;
  1253.  
  1254.  { -------------  Hauptprozedur  Alarmset  -----------------------------------}
  1255.  
  1256.  BEGIN
  1257.   nr := 1 ;
  1258.   fertig := false ;
  1259.   fehlernr := 0 ;
  1260.   Alarm_Init (nr) ;
  1261.   pushed := Do_Dialog (alarmset_zei, 0) ;
  1262.   WHILE NOT fertig DO
  1263.    BEGIN
  1264.     Obj_SetState (alarmset_zei, pushed, normal, true) ;
  1265.     CASE pushed OF
  1266.       alarmnr1  :  BEGIN
  1267.                     nr := 1 ;
  1268.                     Alarm_Init (nr) ;
  1269.                    END ;
  1270.       alarmnr2  :  BEGIN
  1271.                     nr := 2 ;
  1272.                     Alarm_Init (nr) ;
  1273.                    END ;
  1274.       alarmnr3  :  BEGIN
  1275.                     nr := 3 ;
  1276.                     Alarm_Init (nr) ;
  1277.                    END ;
  1278.       alarmnr4  :  BEGIN
  1279.                     nr := 4 ;
  1280.                     Alarm_Init (nr) ;
  1281.                    END ;
  1282.       alreset   :  Alarm_Voreinstellung ;
  1283.       asetok    :  Do_Alarm_Auswerten (nr, fehlernr) ;
  1284.      END ;    { CASE }
  1285.  
  1286.     IF pushed = asetabbr THEN
  1287.      BEGIN
  1288.       Do_Alarm_Auswerten (nr, fehlernr) ;
  1289.       IF fehlernr = 0 THEN fertig := true ;
  1290.      END ;
  1291.  
  1292.     IF fehlernr <> 0 THEN
  1293.      BEGIN
  1294.       IF fehlernr & 1 <> 0 THEN
  1295.        auswahl := Do_Alert ('[2][Falsches Einschaltdatum ! ][ Nochmal ]', 1) ;
  1296.       IF fehlernr & 2 <> 0 THEN
  1297.        auswahl := Do_Alert ('[2][Falsches Ausschaltdatum ! ][ Nochmal ]', 1) ;
  1298.       IF fehlernr & 4 <> 0 THEN
  1299.        auswahl := Do_Alert ('[2][Falsche Einschaltuhrzeit ! ][ Nochmal ]', 1) ;
  1300.       IF fehlernr & 8 <> 0 THEN
  1301.        auswahl := Do_Alert ('[2][Falsche Ausschaltuhrzeit ! ][ Nochmal ]', 1) ;
  1302.       IF fehlernr & 16 <> 0 THEN
  1303.   auswahl := Do_Alert ('[2][Einschaltzeit > Ausschaltzeit ! ][ Nochmal ]', 1) ;
  1304.      END ;
  1305.  
  1306.     IF NOT fertig THEN
  1307.      BEGIN
  1308.       Alarm_Init (nr) ;
  1309.       pushed := Do_Dialog (alarmset_zei, datumein) ;
  1310.      END ;
  1311.    END ;      { WHILE NOT fertig }
  1312.  
  1313.   End_Dialog (alarmset_zei) ;
  1314.   fehler := 4 ;  { damit anschließend Hauptdialog wiedererscheint }
  1315.  END ;
  1316.  
  1317.  
  1318. {-----------------------------------------------------------------------------}
  1319. {                                                                             }
  1320. {   SCHALTEN  :  Bedienung des Schaltinterfaces                               }
  1321. {                                                                             }
  1322. {-----------------------------------------------------------------------------}
  1323.  
  1324. PROCEDURE Do_Schalten ;
  1325.  
  1326.  BEGIN
  1327.   IF (switch & $0001) <> 0 THEN
  1328.    Obj_SetState (schalten_zei, kanal1, selected, false)
  1329.   ELSE
  1330.    Obj_SetState (schalten_zei, kanal1, normal, false) ;
  1331.  
  1332.   IF (switch & $0002) <> 0 THEN
  1333.    Obj_SetState (schalten_zei, kanal2, selected, false)
  1334.   ELSE
  1335.    Obj_SetState (schalten_zei, kanal2, normal, false) ;
  1336.  
  1337.   IF (switch & $0004) <> 0 THEN
  1338.    Obj_SetState (schalten_zei, kanal3, selected, false)
  1339.   ELSE
  1340.    Obj_SetState (schalten_zei, kanal3, normal, false) ;
  1341.  
  1342.   IF (switch & $0008) <> 0 THEN
  1343.    Obj_SetState (schalten_zei, kanal4, selected, false)
  1344.   ELSE
  1345.    Obj_SetState (schalten_zei, kanal4, normal, false) ;
  1346.  
  1347.   pushed := Do_Dialog (schalten_zei, 0) ;
  1348.   Obj_SetState (schalten_zei, pushed, normal, true) ;
  1349.  
  1350.   switch := 0 ;
  1351.   IF Obj_State (schalten_zei, kanal1) & Selected <> 0 THEN switch := 1 ;
  1352.   IF Obj_State (schalten_zei, kanal2) & Selected <> 0 THEN switch := switch|2 ;
  1353.   IF Obj_State (schalten_zei, kanal3) & Selected <> 0 THEN switch := switch|4 ;
  1354.   IF Obj_State (schalten_zei, kanal4) & Selected <> 0 THEN switch := switch|8 ;
  1355.  
  1356.   Do_Switch (switch) ;
  1357.   End_Dialog (schalten_zei) ;
  1358.  
  1359.   fehler := 0 ;               { Damit Hauptdialog beendet wird }
  1360.  END ;
  1361.  
  1362.  
  1363. {-----------------------------------------------------------------------------}
  1364. {                                                                             }
  1365. {   SYSTEM    :  Alles zur Verwaltung des Hauptdialoges                       }
  1366. {                                                                             }
  1367. {-----------------------------------------------------------------------------}
  1368.  
  1369. {------------------------ Do_Auswerten : Wertet Datum und Uhrzeit... aus -----}
  1370.  
  1371. PROCEDURE Do_Auswerten ;
  1372.  
  1373.  VAR    korrekt                 : boolean ;
  1374.         index                   : integer ;
  1375.  
  1376.  BEGIN
  1377.   fehler := 0 ;
  1378.   Get_DEdit (system_zei, sdatum, datum_str) ;
  1379.   Get_DEdit (system_zei, szeit, zeit_str) ;
  1380.   Rueckwandel_Datum (datum_str, datum, korrekt) ;
  1381.   IF NOT korrekt THEN
  1382.    BEGIN
  1383.     fehler := fehler + 1 ;
  1384.     Wandel_Date (get_date, datum_str) ;     { Bei Fehleingabe wird das     }
  1385.    END ;                                    { aktuelle Datum eingesetzt    }
  1386.   IF fehler & 1 = 0 THEN Set_Date (datum) ;
  1387.  
  1388.   Rueckwandel_Zeit (zeit_str, zeit, korrekt) ;
  1389.   IF NOT korrekt THEN
  1390.    BEGIN
  1391.     fehler := fehler + 2 ;
  1392.     Wandel_Time (get_time, zeit_str) ;      { Fehleingabe, Einsetzen der   }
  1393.    END ;                                    { aktuellen Uhrzeit            }
  1394.   IF fehler & 2 = 0 THEN Set_Time (zeit) ;
  1395.  
  1396.   IF Obj_State (system_zei, uhr) & Selected <> 0 THEN
  1397.    uhr_flag := true
  1398.   ELSE
  1399.    BEGIN
  1400.     IF uhr_flag THEN
  1401.      BEGIN
  1402.       zeit_str := '     ' ;
  1403.       FOR index := 1 TO 5 DO                { Zeitanzeige löschen }
  1404.        Put_Char (zeit_str[index], 588 + index * 8, 2, 2, 0, 0) ;
  1405.      END ;
  1406.     uhr_flag := false ;
  1407.    END ;
  1408.   IF Obj_State (system_zei, alarm1) & Selected <> 0 THEN
  1409.    alarm_flag[1] := true
  1410.   ELSE
  1411.    alarm_flag[1] := false ;
  1412.  
  1413.   IF Obj_State (system_zei, alarm2) & Selected <> 0 THEN
  1414.    alarm_flag[2] := true
  1415.   ELSE
  1416.    alarm_flag[2] := false ;
  1417.  
  1418.   IF Obj_State (system_zei, alarm3) & Selected <> 0 THEN
  1419.    alarm_flag[3] := true
  1420.   ELSE
  1421.    alarm_flag[3] := false ;
  1422.  
  1423.   IF Obj_State (system_zei, alarm4) & Selected <> 0 THEN
  1424.    alarm_flag[4] := true
  1425.   ELSE
  1426.    alarm_flag[4] := false ;
  1427.  
  1428.  END ;
  1429.  
  1430.  
  1431. {------------------------ Do_System : Verwaltet Hauptdialog ------------------}
  1432.  
  1433. PROCEDURE Do_System ;
  1434.  
  1435.  BEGIN
  1436.   fehler := 0 ;
  1437.  
  1438.   REPEAT
  1439.    IF uhr_flag THEN
  1440.     Obj_SetState (system_zei, uhr, selected, false)
  1441.    ELSE
  1442.     Obj_SetState (system_zei, uhr, normal, false) ;
  1443.  
  1444.    IF alarm_flag[1] THEN
  1445.     Obj_SetState (system_zei, alarm1, selected, false)
  1446.    ELSE
  1447.     Obj_SetState (system_zei, alarm1, normal, false) ;
  1448.  
  1449.    IF alarm_flag[2] THEN
  1450.     Obj_SetState (system_zei, alarm2, selected, false)
  1451.    ELSE
  1452.     Obj_SetState (system_zei, alarm2, normal, false) ;
  1453.  
  1454.    IF alarm_flag[3] THEN
  1455.     Obj_SetState (system_zei, alarm3, selected, false)
  1456.    ELSE
  1457.     Obj_SetState (system_zei, alarm3, normal, false) ;
  1458.  
  1459.    IF alarm_flag[4] THEN
  1460.     Obj_SetState (system_zei, alarm4, selected, false)
  1461.    ELSE
  1462.     Obj_SetState (system_zei, alarm4, normal, false) ;
  1463.  
  1464.    Wandel_Date (get_date, datum_str) ;
  1465.    Wandel_Time (get_time, zeit_str) ;
  1466.    Set_DEdit (system_zei, sdatum, '__/__/__', '999999', datum_str,
  1467.               System_Font, TE_Left) ;
  1468.    Set_DEdit (system_zei, szeit, '__:__.__', '999999', zeit_str,
  1469.               System_Font, TE_Left) ;
  1470.    pushed := Do_Dialog (system_zei, 0) ;
  1471.    Obj_SetState (system_zei, pushed, normal, true) ;
  1472.  
  1473.    IF (pushed <> sysok) AND (pushed <> stdtext) AND (pushed <> stdgraf) THEN
  1474.     BEGIN
  1475.      End_Dialog (system_zei) ;
  1476.      fehler := 0 ;
  1477.     END ;
  1478.    IF (pushed <> sysabbr) THEN Do_Auswerten ;  { Datum & Uhrzeit übernehmen }
  1479.   IF No_Dialog THEN
  1480.    BEGIN
  1481.     Alarm_Voreinstellung ;
  1482.     No_Dialog := false ;
  1483.    END ;
  1484.    IF fehler = 0 THEN
  1485.     CASE pushed OF
  1486.       stdtext   : Standard_Text ;    { Drucker auf Standard-Texteinstellung   }
  1487.       stdgraf   : Standard_Grafik ;  {    "     "  Standard-Grafikeinstellung }
  1488.       drufein   : Drucker_Feineinstellung ;
  1489.       salsetz   : Do_AlarmSet ;      { Alarm verwalten                        }
  1490.       sparsetz  : Parameter_Setzen ; { Tastatur-Repeat steuern                }
  1491.       schalt    : Do_Schalten ;      { Schaltinterface bedienen               }
  1492.      END ;
  1493.    IF fehler & 1 <> 0 THEN
  1494.     auswahl := Do_Alert ('[2][ Falsche Datumseingabe ! ][ Nochmal ]', 1) ;
  1495.    IF fehler & 2 <> 0 THEN
  1496.     auswahl := Do_Alert ('[2][ Falsche Uhrzeiteingabe ! ][ Nochmal ]', 1) ;
  1497.   UNTIL (fehler = 0) OR (pushed = sysabbr) ;
  1498.   IF pushed = sysok THEN End_Dialog (system_zei) ;
  1499.  END ;
  1500.  
  1501. {-----------------------------------------------------------------------------}
  1502. {                                                                             }
  1503. {   EVENTS  : Alles zur Ereignisbearbeitung                                   }
  1504. {                                                                             }
  1505. {-----------------------------------------------------------------------------}
  1506.  
  1507.  
  1508. {------------------------ Event_Loop : Ereignisverwaltung --------------------}
  1509.  
  1510. PROCEDURE Event_Loop ;
  1511.  
  1512.  VAR  h_switch, i               : integer ;
  1513.  
  1514.  BEGIN
  1515.   WHILE true DO
  1516.    BEGIN
  1517.     event := Get_Event (E_Timer|E_Message, 0, 0, 0, 1000,
  1518.                         false, 0, 0, 0, 0,
  1519.                         false, 0, 0, 0, 0,
  1520.                         message, dummy, dummy, dummy, dummy, dummy, dummy) ;
  1521.  
  1522.     IF event & E_Message <> 0 THEN
  1523.      BEGIN
  1524.       IF message[0] = AC_Open THEN Do_System ;
  1525.      END ;
  1526.  
  1527.     IF (event & E_Timer <> 0) AND (event & E_Message = 0) THEN
  1528.      BEGIN
  1529.       zeit := Get_Time ;
  1530.       datum := Get_Date ;
  1531.       IF (uhr_flag) AND (log_base = screen) THEN
  1532.        BEGIN
  1533.         Wandel_Time (zeit, zeit_str) ;
  1534.         Put_Char (zeit_str[1], 596, 2, 2, 0, 0) ;
  1535.         Put_Char (zeit_str[2], 604, 2, 2, 0, 0) ;
  1536.         Put_Char (':', 612, 2, 2, 0, 0) ;
  1537.         Put_Char (zeit_str[3], 620, 2, 2, 0, 0) ;
  1538.         Put_Char (zeit_str[4], 628, 2, 2, 0, 0) ;
  1539.        END ;
  1540.  
  1541.    { Alarm testen und gegebenenfalls ausführen }
  1542.       FOR i := 1 TO 4 DO
  1543.        BEGIN
  1544.         IF (alarm_flag[i]) OR (alarm_tab[i].zustand = an) THEN
  1545.          BEGIN
  1546.           IF alarm_tab[i].zustand = an THEN            { AUSSCHALTEN }
  1547.            IF alarm_tab[i].datum_aus = datum THEN
  1548.             BEGIN
  1549.              IF check_zeit (alarm_tab[i].zeit_aus, zeit) THEN
  1550.               BEGIN
  1551.                h_switch := 0 ;
  1552.                IF alarm_tab[i].extern1 = an THEN h_switch := h_switch + 1 ;
  1553.                IF alarm_tab[i].extern2 = an THEN h_switch := h_switch + 2 ;
  1554.                IF alarm_tab[i].extern3 = an THEN h_switch := h_switch + 4 ;
  1555.                IF alarm_tab[i].extern4 = an THEN h_switch := h_switch + 8 ;
  1556.                switch := switch & (~h_switch) ;
  1557.                IF h_switch <> 0 THEN Do_Switch (switch) ;
  1558.                alarm_flag[i] := false ;
  1559.                alarm_tab[i].zustand := aus ;
  1560.               END ;
  1561.             END ;
  1562.           IF alarm_tab[i].zustand = aus THEN           { EINSCHALTEN }
  1563.            IF alarm_tab[i].datum_ein = datum THEN
  1564.             BEGIN
  1565.              IF (alarm_tab[i].datum_aus <> datum) OR
  1566.                 NOT check_zeit (alarm_tab[i].zeit_aus, zeit) THEN
  1567.               IF check_zeit (alarm_tab[i].zeit_ein, zeit) THEN
  1568.                BEGIN
  1569.                 h_switch := 0 ;
  1570.                 IF alarm_tab[i].extern1 = an THEN h_switch := h_switch + 1 ;
  1571.                 IF alarm_tab[i].extern2 = an THEN h_switch := h_switch + 2 ;
  1572.                 IF alarm_tab[i].extern3 = an THEN h_switch := h_switch + 4 ;
  1573.                 IF alarm_tab[i].extern4 = an THEN h_switch := h_switch + 8 ;
  1574.                 switch := switch | h_switch ;
  1575.                 IF h_switch <> 0 THEN Do_Switch (switch) ;
  1576.                 alarm_tab[i].zustand := an ;
  1577.                 IF (alarm_tab[i].tonsignal = an) AND NOT playing
  1578.                  THEN Do_Gong (1) ;
  1579.                END ;
  1580.             END ;
  1581.          END ;      { alarm_flag[i] = true }
  1582.  
  1583.        END ;    { FOR i := 1 TO 4 }
  1584.  
  1585.      END ;      { TIMER-Event  }
  1586.  
  1587.    END ;
  1588.  END ;
  1589.  
  1590. { ==========================  HAUPTPROGRAMM  ================================ }
  1591.  
  1592. BEGIN
  1593.  ap_id := Init_Gem ;
  1594.  IF ap_id > 0 THEN
  1595.   BEGIN
  1596.    IF NOT Load_Resource (rsc_filename) THEN
  1597.     BEGIN
  1598.      auswahl := Do_Alert ('[3][RSC-File nicht gefunden !][ Abbruch]',1) ;
  1599.      Exit_Gem ;
  1600.      Halt ;
  1601.     END ;
  1602.  
  1603.    eintrag := '  System' ;               { Eintrag in Menüzeile festlegen }
  1604.    dummy := Menu_Register (ap_id, eintrag) ;
  1605.  
  1606.    Init_Mouse ;
  1607.    Find_Dialog (system, system_zei) ;      Center_Dialog (system_zei) ;
  1608.    Find_Dialog (drucker, drucker_zei) ;    Center_Dialog (drucker_zei) ;
  1609.    Find_Dialog (alarmset, alarmset_zei) ;  Center_Dialog (alarmset_zei) ;
  1610.    Find_Dialog (paramset, param_zei) ;     Center_Dialog (param_zei) ;
  1611.  
  1612.    Make_Schalten ;                       { Dialog zum Schalten konstruieren }
  1613.  
  1614.    Initialisiere ;                       { Standardwerte setzen             }
  1615.  
  1616. Do_Gong(1) ;
  1617.  
  1618.    Event_Loop ;
  1619.   END ;
  1620. END.
  1621.